SAP RFC函数测试工具 V1.1 工具下载: 地址1;地址2 A. 指导AI写了个小工具,方便SAP RFC相关测试; B. 连接管理:配置和管理SAP连接 2. 函数测试:浏览和执行RFC函数 a. 筛选SAP函数,双击函数后,自动解析函数参数,并可按参数类型,生成JSON格式的调用模板; b. 服务测试:注册RFC服务,支持SAP调用该服务对应的RFC地址 a. 注册程序,自动校验程序标识是否存在; b. 注册后,可以按JSON格式设置返回内容; c. SAP按程序标识对应的RFC Target执行后,返回RFC Tool中设置的返回内容。 图片 图片 4. IDOC发送:解析WE60文件,测试相应IDOC a. IDOC接收:注册IDOC服务,支持SAP的外向IDOC调用本服务 a. 目前不太稳定; 6. 历史记录:查看执行历史,拷贝输入参数等 a. 查询历史测试文件; b.
什么是RFC? RFC是SAP系统和其他(SAP或非SAP)系统间的一个重要而常用的双向接口技术,也被视为SAP与外部通信的基本协议。 RFC客户端发起远程功能调用以执行RFC服务器提供的功能。 其中,调用系统和被调用系统均可以是SAP系统和非SAP系统,此外还可以在SAP系统内部将特定应用服务器指定为目标系统。 根据调用方向的不同(SAP系统调用其他模块或其他系统调用SAP模块),RFC接口提供以下两种服务。 (1)ABAP程序的调用接口 (2)非SAP ABAP程序的调用接口。 4、队列RFC(qRFC,queue(d) RFC)是tRFC的一个增强版本,它保证了所传输数据的处理次序,并可用于SAP-SAP及SAP-non SAP。 ENDFORM 第三,进行异步RFC方式的RFM调用 RFC实际上是异步RFC调用的应用之一,异步RFC调用适用于多个SAP ABAP系统间的并行处理(不支持非SAP系统),可以在同一个系统内部使用异步
什么是RFC? RFC是SAP系统和其他(SAP或非SAP)系统间的一个重要而常用的双向接口技术,也被视为SAP与外部通信的基本协议。 RFC客户端发起远程功能调用以执行RFC服务器提供的功能。 其中,调用系统和被调用系统均可以是SAP系统和非SAP系统,此外还可以在SAP系统内部将特定应用服务器指定为目标系统。 根据调用方向的不同(SAP系统调用其他模块或其他系统调用SAP模块),RFC接口提供以下两种服务。 (1)ABAP程序的调用接口 (2)非SAP ABAP程序的调用接口。 4、队列RFC(qRFC,queue(d) RFC)是tRFC的一个增强版本,它保证了所传输数据的处理次序,并可用于SAP-SAP及SAP-non SAP。 ENDFORM 第三,进行异步RFC方式的RFM调用 RFC实际上是异步RFC调用的应用之一,异步RFC调用适用于多个SAP ABAP系统间的并行处理(不支持非SAP系统),可以在同一个系统内部使用异步
RFC_READ_TABLE 第三方系统可通过RFC调用此函数直接访问(查询)SAP R/3系统的数据表。 合理使用此函数可以大幅度减少第三方系统集成数据接口开发量。 查询表结构 ? 查询数据 ?
RFC_READ_TABLE源码中,在SELECT. SAP 751后sql查询语法增加了offset关键字可以实现分页,参考官方文档 可以先分页查询出结果,再循环内表拼接字段,大幅提高效率。 SAP 751之前版本没有offset关键字,则采用如下折中方法 ROWSKIPS=0的请求,直接通过UP TO关键字控制查询结果行数,一次性查出记录 ROWSKIPS>0的请求,通过SELECT. 0 *" EXPORTING *" VALUE(LINES_PER_RECORD) TYPE INTEGER *" TABLES *" OPTIONS STRUCTURE RFC_DB_OPT *" FIELDS STRUCTURE RFC_DB_FLD *" DATA STRUCTURE TAB512 *" EXCEPTIONS *" TABLE_NOT_AVAILABLE
队列RFC(qRFC)是事务性RFC(qRFC)的增强版,可用于SAP-SAP及SAP-非SAP之间的连接。tRFC调用前通过函数模块TRFC_SET_QUEUE_NAME指定想要使用的队列。 5. 并行RFC 并行RFC(pRFC,parallel RFC)实质上为异步RFC,在功能上实现多个SAP系统或同一SAP系统内部不同应用服务器间,以及应用服务器内部各个工作过程的并行处理。 RFC Remote function Call 远程功能调用, 是SAP系统之间以及非SAP系统之间程序通信的基本接口技术. 例如BAPI , ALE都是基于RFC实现的。 异步RFC调用实现并行处理: 异步RFC调用适用于多个SAP ABAP系统间的并行处理(不支持SAP系统和其他系统间的并行过程) 在同一SAP系统内部使用异步RFC调用,将部分处理负载转移到其他的应用服务器 队列RFC是事务性RFC的增强版本,用于SAP-SAP及SAP-非SAP系统间的连接 多个FM发送至目标系统中的三种可能情况(实际的连接过程仍然通过事务性RFC来实现,可以增加入站、出站队列),普通事务性
图二 SAP中的异步通信 以上述两种基本通信模式为基础,SAP系统中的RFC过程扩展为以下几种不同的模式。 1. 队列RFC(qRFC)是事务性RFC(qRFC)的增强版,可用于SAP-SAP及SAP-非SAP之间的连接。tRFC调用前通过函数模块TRFC_SET_QUEUE_NAME指定想要使用的队列。 5. 并行RFC 并行RFC(pRFC,parallel RFC)实质上为异步RFC,在功能上实现多个SAP系统或同一SAP系统内部不同应用服务器间,以及应用服务器内部各个工作过程的并行处理。 异步RFC调用实现并行处理: 异步RFC调用适用于多个SAP ABAP系统间的并行处理(不支持SAP系统和其他系统间的并行过程) 在同一SAP系统内部使用异步RFC调用,将部分处理负载转移到其他的应用服务器 队列RFC是事务性RFC的增强版本,用于SAP-SAP及SAP-非SAP系统间的连接 多个FM发送至目标系统中的三种可能情况(实际的连接过程仍然通过事务性RFC来实现,可以增加入站、出站队列),普通事务性
BAPI:是sap做好的实现待定业务操作的rfc。 RFC:是面向过程的,调用简单直接; BAPI:是面向对象的,有属性,方法,有事件。 更加的复杂和丰富,更能反映sap业务的应用,bapi方法的构造是基于rfc的,所以可以说bapi集成了rfc。 但是至少也可以说大部分吧,VB里面用BAPI,就是因为这个BAPI函数具有RFC的特性) BAPI是个SAP里一个很好的思想,把业务对象都对象化了。 刚学ABAP/4时,并不能理解SAP所说”ABAP/4”中的‘4’,而觉得它更像是一种脚本语言,顶多也就是和C一样,但是自从我接触了BAPI之后,我才体会到SAP说ABAP是种4G语言的确不虚。 也就是BAPI输入参数,VB也好,SAP本身的 Screen也好,甚至Web页面也好,只不过是一个数据收集器!
SAP系统不开放数据库,我们一般是用open sql写数据查询代码,而非native sql。 所以,接口方式中最常用的SAP对接方式之一,是RFC方式,RFC方式:相对java有jco,对.net有nco,等等,满足各大外围对SAP直连的需求。 然后点击Check Conn:可以看到绿灯,表示连接SAP系统成功: ? 接着,我们看看接口测试的示例文件是什么样: ? TEST_NO1,NO2中可以是任意的RFC名称,和任意的测试数据 我们上传后,自动出现下拉框,展示如下: ? ? 换一个简化一点的结果执行: ? ? 以上是完整版, 后续有时间可能考虑在云平台进行下部署,仅开放RFC_READ_TABALE,大家可以进行验证。
下载安装SAP JCO3依赖 官方下载 本站下载 解压后找到 sapjco3.jar引入JAVA项目中;sapjco3.dll放到系统目录下 实现DestinationDataProvider 此Provider 用以提供连接SAP目标的属性 public class JCODestinationDataProvider implements DestinationDataProvider { // 目标连接属性 Environment.registerDestinationDataProvider(new JCODestinationDataProvider( destMap // 传入目标属性配置数据 )); 调用RFC 获取JCO目标 JCoDestination jcoDestination = JCoDestinationManager.getDestination(destinationName); // 获取RFC function.getTableParameterList(); JCoParameterList pCmlist= function.getChangingParameterList(); // 调用RFC
何谓RFC,就是一个Function,可以被非SAP系统调用,比如VB,C#,Java等。如果我们在RFC中INCLUDE了相关的业务逻辑,那么我们就可以完全操控SAP中的业务数据了。 而这一切,可以利用C#调用RFC来实现。 要实现整个过程,则必须要现在SAP中建立好相应的RFC函数,然后用VS建立好相应的程序,写代码调用就可以了。 OK,本节主要讲在SAP中建立我们想要的RFC出来。 那么,我们假定要实现这样的一个功能:运行在SAP系统外的一个程序窗体,上面有一个下拉框和文本框。 主画面如下: 画面切换至 属性 页,设置该RFC为可远程调用。 这里的激活不是单单激活这个RFC这么简单,还有其他的项目,记得要勾选上: 至此,RFC建立完毕。 接下去就是在C#中调用它咯,下篇博文放出!
本文就说明在C#中如何编写代码来调用SAP中的RFC函数获取数据。(Winform32) 首先需要引用两个NCO3.0的DLL,下载地址在文后。 然后在程序代码页面引用: using SAP.Middleware.Connector; 然后所有的代码如下: namespace SAP_RFC { public partial 结果如下: SAP中品号信息如下: 由此可见数据完全OK,调用成功。 程序在第一次载入的时候有点慢,在链接SAP和登陆。后续在下拉框变化的时候就立马显示出品名出来了,丝毫没有任何停顿。 第二次链接SAP的时候大概是不必在登陆了,SAP系统中已有登陆信息,运行T-CODE:SM04 红色框中这两个即是我们的RFC调用所留下的登录会话。 一旦我们的C#程序退出之后,这两个RFC也就退出了。 如果我们的C#程序是ASP.NET的话,页面关闭之后这个RFC登录信息都还在的。除非IIS关闭,否则只有等到SAP系统超时退出这两个登陆会话了。
还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或 SAPNCO3.0 .NET4.0 : http://files.cnblogs.com/files/saper/SAPNCO3.0_Patch18_Net4.zip 最后,说一句:只有不懂SAP 的初学者才会在SAP和第三方系统集成的时候使用Webservice技术,忽略了SAP独有的RFC接口技术! 只有初学者才会相反地认为RFC不安全和不稳定...
本来今天是要写一篇关于NCO3.0的东西,就是关乎.NET调用SAP的RFC的,支持VS2010和.NET 4.0等。 而且相关的资料非常的少,转来转去全部都是那么一个例子,丝毫没有直观的DEMO,更搞笑的是SAP里面的RFC是怎么建立的都没有说明,只有该死的C#代码。 公司有几只程序,是在台湾SAP端运行程序,自动下载品号等信息至厦门的SQL Server数据库供OA使用的,每次要用到的品号都需要去SAP系统运行那个程序。 我就想着如果能在OA这边用NCO3.0,然后调用SAP的RFC,就自动下载所需要的品号那就非常方便了。我在030也试用了一下,很OK! 既然.NET能够和SAP互相通信,在RFC里就可以任意发挥了,想做什么就做什么。这样可以免去SAP系统的账户成本压力。 呵呵,下篇博文开始介绍一下NCO3.0这个东西。
RFC及RFC编辑者: RFC(Request For Comments)-意即“请求注解”,包含了关于Internet的几乎所有重要的文字资料。 RFC由一系列草案组成,起始于1969年(第一个RFC文档发布于1969年4月7日,参见“RFC30年”,RFC2555”),RFC文档是一系列 关于Internet(早期为ARPANET)的技术资料汇编 “RFC编辑者”是RFC文档的出版者,它负责RFC最终文档的编辑审订。“RFC编辑者”也保留有RFC的主文件,称为RFC索引,用户可以在线检索。 RFC编辑者负责RFC以及RFC的整体结构文档,并维护RFC的索引。 有一个不断被更新的文件RFC-INDEX.TXT按照RFC的编号来索引所有的文件,对于因特网标准文件还列 出了其相应的STD编号。 RFC文档必须被分配RFC编号后才能在网络上发布。
RFC簡介 RFC(Remote Function Call)是SAP系統之間以及SAP與外部係統之間程序通信的基本接口技術。 RFC通信模式 RFC分為同步通信和異步通信。 SAP中的RFC模式 1.同步RFC 同步RFC,基於同步通信模式,遠程調用時,通信雙方的系統必須均可用,調用程序等待遠程功能處理結束并返回結果。 4.隊列RFC 隊列RFC是事務性RFC功能上的進一步擴展。 在事務性RFC中,存在多個LUW時,這些LUW的執行次序無法確定 ,如果要確保各個LUW都按照指定的順序執行,可以通過隊列RFC對事務性RFC進行序列化。 5.並行RFC 並行RFC實質為異步RFC,在功能上實現多個SAP系統或同一SAP系統內部不同應用服務器間,以及應用服務器內部各個工作過程的並行處理。
因为TW那边的卡控文字说明是繁体的,所以OA调用了RFC申请开立请购单之后就会返回这个错误信息,而且是乱码,如下图: 看到这个乱码我还以为是出了什么异常,因为系统抛出异常类是:RfcCommunicationException 我们在调用RFC前的配置信息里面可以规定编码,如下红字所示: public class MyBackendConfig : IDestinationConfiguration 这样规定了这个编码为8300(繁体),于是系统正确提示了信息: 关于这个Codepage的代码含义,如下表: 至此,乱码问题完全解决~ PS:.NET连接SAP
服务端要存储登陆状态,这对单机模式没什么用影响,对于集群模式是很大的挑战,为了方便横向扩展,要把这些登陆态拆出来,常见的做法是写入redis集群和持久化session数据,有了redis程序员就可以大展身手了,可以把很多信息放入redis不在局限于session ID,经常把用户信息也放入进去,这就会照成很多未知风险,虽然技术规范可以规避一些风险,但是单点风险还是存在的。
有一个笨笨的做法就是通过返回值来判断,但是这样不灵活,同时也会因为品号不存在而继续之行RFC。如果我们能自己抛出异常,程序自动停止执行RFC,那将是两全其美! 首先,在SE37中建立一个RFC,就用上篇博文的RFC吧。 如此SAP端设置就结束了。 { MessageBox.Show("您输入的不是数值", "SAP RFC返回信息", MessageBoxButtons.OK, MessageBoxIcon.Warning { MessageBox.Show("其他所有错误", "SAP RFC返回信息", MessageBoxButtons.OK, MessageBoxIcon.Warning
本周我们结合 RFC 原文与解读文章 What the useEvent React hook is (and isn't) 一起了解下这个提案。 讨论地址是:精读《React useEvent RFC》· Issue #415 · dt-fe/weekly 如果你想参与讨论,请 点击这里,每周都有新的主题,周末或周一发布。